spring mvc的请求流程

        最近项目遇到了一个400的错误,如下:

 org.springframework.web.client.HttpClientErrorException: 400 null

at org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:78)

at org.springframework.web.client.RestTemplate.handleResponse(RestTemplate.java:700)
at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:653)
at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:613)

at org.springframework.web.client.RestTemplate.postForObject(RestTemplate.java:380)

如果通过浏览器访问,会显示400错误,表示请求格式错误。

    环境:通过org.springframework.web.client.RestTemplate访问spring mvc发布的RESTful服务。

    调试发现没有进入controller。那就是在spring mvc框架内就报错了。

    spring mvc的入口是DispatcherServlet,通过这个类对请求进行调度。

    请求流程如下:

    1,通过url找到对应的Method,Method映射在程序启动的时候已经完成映射。这个过程中会根据Controller的名字调用BeanFactory获得Controller对象,代码如下:


    2,根据request中请求参数组装Method的参数

    3,调用Method方法,传入第2步生成的参数,并返回结果,这个过程调用了我们写的controller

    4,处理生成结果并返回。

    上面发生的异常发生在第2步,因为Method的参数是一个对象,组装参数的时候,需要进行类型转换,如果类型转换失败就会产生400异常,然后就没有进入第3步,也就没有进入我们写的controller。

     具体错误是,时间转换,通过RestTemplate请求的时候,将时间类型转成数字类型,然后发出,虽然接收端Method参数对应的属性标注了转换格式,但是格式不对,最终导致错误。

     所以以后如果遇到400错误可以直接在类型转换的代码打断点调试,就能很快找到问题。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值